****************************************************************************
***					Antwortlatenzen 2005								****
****************************************************************************


* ----------------------------------------------------------
* Rohzeiten
* ----------------------------------------------------------


lookfor zeit-messung		//nur ziemlich wenige Zeitmessungen
							//da bleibt nur Berechnung der Basiszeit wohl
							//nur Interviewl�nge
							
tab q4_t, m			//nur ein fehlender Wert, das macht misstrauisch
tab q3 q4, m		//Leute die nicht w�hlen wollen, sind auch enthalten!
					//Nichtw�hler und Briefw�hler 
					//mit ver�nderter Frageformulierung auch in
					//Variable und deswegen auch in der Zeitmessung
					//enthalten; 2009 und 2013 wurde nur die Zeit von
					//"normalen W�hlern" gemessen, deswegen im Interesse
					//der Vergleichbarkeit hypothetische und 
					//Briefw�hler rauswerfen

* Rohzeiten
gen rohwabs = q4_t
replace rohwabs = . if q3>3 & q3~=.  	//Nichtw�hler
replace rohwabs = . if q4_t==0
fre rohwabs

gen rohpid = q66_t
replace rohpid = . if q66_t==0

*Ausrei�er ausschlie�en
* Wochenweise
foreach var of varlist rohwabs rohpid {
	foreach week of numlist 32/37 {
		sum `var' if woche==`week'
		gen over`var'`week'2sd = `var'>(r(mean)+2*r(sd)) ///
			 & woche==`week'
		replace over`var'`week'2sd = . if woche==`week' ///
			& `var'==.
		gen over`var'`week'3sd = `var'>(r(mean)+3*r(sd)) ///
			 & woche==`week'
		replace over`var'`week'3sd = . if woche==`week' & ///
			`var'==.
		gen under`var'`week'2sd = `var'<(r(mean)-2*r(sd)) ///
			& woche==`week'
		replace under`var'`week'2sd = . if woche==`week' ///
			& `var'==.
		gen under`var'`week'3sd = `var'<(r(mean)-3*r(sd)) ///
			 & woche==`week'
		replace under`var'`week'3sd = . if woche==`week' & ///
			`var'==.
	}
}

tab rohpid if woche==37
sum rohpid if woche==37
display r(mean)+2*r(sd)
sum rohpid if rohpid>r(mean)+2*r(sd) & woche==37

tab overrohpid372sd



* Tagesweise
foreach var of varlist rohwabs rohpid {
	forvalues day=1/41 {
		sum `var' if tag==`day'
		gen over`var'd`day'2sd = `var'>(r(mean)+2*r(sd)) ///
			 & tag==`day'
		replace over`var'd`day'2sd = . if tag==`day' ///
			& `var'==.
		gen over`var'd`day'3sd = `var'>(r(mean)+3*r(sd)) ///
			 & tag==`day'
		replace over`var'd`day'3sd = . if tag==`day' ///
			& `var'==.
		gen under`var'd`day'2sd = `var'<(r(mean)-2*r(sd)) ///
			& tag==`day'
		replace under`var'd`day'2sd = . if tag==`day' ///
			& `var'==.
		gen under`var'd`day'3sd = `var'<(r(mean)-3*r(sd)) ///
			 & tag==`day'
		replace under`var'd`day'3sd = . if tag==`day' ///
			& `var'==.
	}
}


fre overrohpidd413sd

* Ausschluss		//damit Schleifen unten laufen, schon mal erstellen
gen rohwabs_2sdout = rohwabs
gen rohpid_2sdout = rohpid
gen rohwabs_3sdout = rohwabs
gen rohpid_3sdout = rohpid

foreach var of varlist rohwabs rohpid {
	foreach week of numlist 32/37 {
		replace `var'_2sdout = . if over`var'`week'2sd==1 ///
			& woche==`week'
		replace `var'_2sdout = . if under`var'`week'2sd==1 ///
			& woche==`week'
		replace `var'_3sdout = . if over`var'`week'3sd==1
		replace `var'_3sdout = . if under`var'`week'3sd==1
}
}

			
gen rohwabs_2sddout = rohwabs //damit Schleifen unten laufen, schon mal erstellen
gen rohpid_2sddout = rohpid
gen rohpid_3sddout = rohpid
gen rohwabs_3sddout = rohwabs

foreach var of varlist rohwabs rohpid {
	forvalues day=1/41 {
		replace `var'_2sddout = . if over`var'd`day'2sd==1 ///
			& tag==`day'
		replace `var'_2sddout = . if under`var'd`day'2sd==1 ///
			& tag==`day'
		replace `var'_3sddout = . if over`var'd`day'3sd==1 ///
			& tag==`day'
		replace `var'_3sddout = . if under`var'd`day'3sd==1 ///
			& tag==`day'
}
}

fsum rohpid_2sddout

drop over* under*

fsum roh*		//unplausibel hohe Werte


*---------------------------------------------------------
* Basiszeit berechnen
*----------------------------------------------------------

lookfor zeit
sum q70_t

describe q1-q70

* Wie viele Fragen hat Interview?

/*Problem: Anzahl Variablen != Anzahl Fragen 
L�sung: Wenn f�r eine Frage mehrere Variablen, "�berfl�ssige"
variablen ans Ende des Datensatzes schieben, damit sp�ter sch�n �ber Variablen-
liste gez�hlt werden kann (z.B: bei Multiple Response Variablen). 
Andere Variablen, wie zum Beispiel Zeitmessungen,
auch verschieben, denn das sind keine Fragen an Befragten. */

order q*_t  ///alle Reaktionszeiten
	q8_02-q8_21 q9_02-q9_22 q11_02-q11_21 /// Koalitionspr�ferenzen
	q15_2 q39_02-q39_09, last			//Parteikontakte im Wkampf
	
	
describe q1-q70, number

gen quest = 147-24
	

/* Gesamtl�nge des Interviews h�ngt davon ab, wie viele Fragen
Befragter tats�chlich beantwortet hat (Filterf�hrung!). Deswegen
z�hlen, wie viele Fragen Befragter nicht gestellt bekommen hat 
("trifft nicht zu")*/


* Wie viele Fragen hat Interview f�r jeden Befragten?

/* Wegen Filterf�hrung und zeitlich begrenzten Adhoc-Fragen unterschiedliche
Fragenanzahl im Interview. Deswegen "trifft nicht zu" z�hlen */


egen count_tnz0 = anycount(q5	q6	q10	q35_b	q35_d	///
	q36a_a	q36a_c	q36b_a 	q36b_b	q37	q38	q38_a	q38_b	///
	q45	q46	q47	q48	q49	q50	q51	q52	q53	q55	q56	q57	q58 ///
	q59	q60	q61	q63	q67	q69), values(0)
egen count_tnz9 = anycount(q9_01), values(9)
egen count_tnz97 = anycount(q34_e q34_g), values(97)

fre count*				//keine Missings: gut


/* Einige Fragen wurden nicht �ber den ganzen Befragungszeitraum
gestellt (z.B. Skalometer Kirchhof). Das muss
auch gez�hlt werden, weil nicht immer als "trifft nicht zu" vermerkt,
sondern einfach als Missing. Im Fragebogen nachschauen */

fre q13_d q14_d
tab q31_f datum			//Kirchhof wurde erst ab 01.09 gefragt,
						//Befragten davor hat man einfach die 0
						//zugewiesen (unfassbar!), m�ssen als
						//tnz gez�hlt werden 
						
gen kirchhof_tnz = 0
replace kirchhof_tnz = 1 if datum< 50901						
tab kirchhof_tnz datum


tab q13_d day, m
gen help = 0
replace help = 1 if q13_d==. | q14_d==. 	//viertes Ziel erst ab bestimmtem Datum
replace help = 2 if q13_d==. & q14_d==.

fre help			//keine Missings: gut

gen count_tnz = count_tnz0 + count_tnz9 + count_tnz97 ///
	+ help + kirchhof_tnz
fre count_tnz, all

drop count_tnz? count_tnz?? help kirchhof*

gen quest_pers = quest - count_tnz

/* Laut
tab welle
und Methodenbericht sind nur Leute im Datensatz, die Vorwahl 
komplett beantwortet haben, das hei�t wir haben Fragenanzahl
richtig berechnet*/


* Errechnung Basiszeit
fre q70_t				//da sind unplausibel lange Zeiten
						//bei: 27848 Sekunden entsprichen �ber 7 Stunden
						//das war aber ein langes Telefonat :D
						//Die fallen dann �ber Ausrei�erbereinigung raus

/*gemessen als durchschnittliche Zeit pro Frage (plus 
Zeit, die Inerviewer braucht, um Fragen vorzulesen */
gen basiszeit = q70_t/quest_pers	
replace basiszeit = . if q70_t==0		
sum basiszeit						
corr basiszeit alter 


* Ausrei�erbereinigung Basiszeit

foreach var of newlist basiszeit_2sd basiszeit_3sd ///
	basiszeit_2sdd basiszeit_3sdd {
gen `var' = basiszeit
}


forvalues num=32/37 {
sum basiszeit if woche==`num'
replace basiszeit_3sd = . if basiszeit > (r(mean) + 3 * r(sd)) ///
	& woche==`num'
replace basiszeit_3sd = . if basiszeit < (r(mean) - 3 * r(sd)) ///
	& woche==`num'
replace basiszeit_2sd = . if basiszeit > (r(mean) + 2 * r(sd)) ///
	& woche==`num'
replace basiszeit_2sd = . if basiszeit < (r(mean) - 2 * r(sd)) ///
	& woche==`num'
}

forvalues num=1/41 {
sum basiszeit if tag==`num'
replace basiszeit_3sdd= . if basiszeit > (r(mean) + 3 * r(sd)) ///
	& tag==`num'
replace basiszeit_3sdd = . if basiszeit < (r(mean) - 3 * r(sd)) ///
	& tag==`num'
replace basiszeit_2sdd = . if basiszeit > (r(mean) + 2 * r(sd)) ///
	& tag==`num'
replace basiszeit_2sd = . if basiszeit < (r(mean) - 2 * r(sd)) ///
	& tag==`num'
}


fsum basis*		


*------------------------------------------------------
* Residualindex berechen
*------------------------------------------------------

* 2 Standardabweichungen
reg rohwabs_2sdout basiszeit_2sd [pweight=g_stdwn]
predict latenz_wabs_week2sd, residuals

reg rohwabs_2sddout basiszeit_2sdd [pweight=g_stdwn]
predict latenz_wabs_day2sd, residuals

reg rohpid_2sdout basiszeit_2sd [pweight=g_stdwn]
predict latenz_pid_week2sd, residuals

reg rohpid_2sddout basiszeit_2sdd [pweight=g_stdwn]
predict latenz_pid_day2sd, residuals

* 3 Standardabweichungen
reg rohwabs_3sddout basiszeit_3sd [pweight=g_stdwn]
predict latenz_wabs_week3sd, residuals

reg rohwabs_3sddout basiszeit_3sd [pweight=g_stdwn]
predict latenz_wabs_day3sd, residuals

reg rohpid_3sdout basiszeit_3sd [pweight=g_stdwn]
predict latenz_pid_week3sd, residuals

reg rohpid_3sddout basiszeit_3sdd [pweight=g_stdwn]
predict latenz_pid_day3sd, residuals


corr latenz_pid_day3sd basiszeit
corr latenz_pid_day3sd alter
corr latenz_pid_day3sd weiblich


fsum latenz_wabs*
fsum latenz_pid*


*-----------------------------------------------
* Datensatz zum Zusammenf�hren vorbereiten
*-----------------------------------------------


keep id g_stdwn week_count-rohwabs_3sddout ///
	basiszeit-latenz_pid_day3sd
foreach var of varlist g_stdwn week_count-rohwabs_3sddout ///
	basiszeit-latenz_pid_day3sd {
rename `var' `var'05
}

gen year = 2005
gen lfdn05 = id

drop id

save "2005\2005.dta", replace


